/* 
 * File:   main.c
 * Author: vagner
 *
 * Created on 10 de Março de 2012, 13:58
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "in_out.h"
#include "Lista.h"


int main(int argc, char** argv) {
    
    char nome_entrada[80];
    char nome_saida[80];
    char* linha = NULL;
    int numero_instancias = 1; /*Menor numero possível de instâncias*/
    int instancias_executadas = 0;
    int num_vertices;
    FILE* arquivo_entrada;
    FILE* arquivo_saida;
    int i;
    int div_x, divid_x; /*o divisor e o dividendo da abcissa x*/
    int div_y, divid_y; /*o divisor e o dividendo da ordenada y*/
    
    
    Ponto* p = cria_ponto_vazio();    
    Vertice* v = cria_vertice_vazio();    
    Lista poligono = cria_lista_vazia();       
    
    
    /*Validando a sintaxe conforme padrão
     *  tp1 -i 'nome do arquivo de entrada' -o 'arquivo_saida'*/
    valida_sintaxe(argc,argv,nome_entrada,nome_saida);
    
    arquivo_entrada = (FILE*) abre_arquivo(nome_entrada,"r");
    arquivo_saida = (FILE*) abre_arquivo(nome_saida,"a+");
    
    /*Iniciamos lendo  a primeira linha do arquivo de entrada para descobrimos
     * o número de instancias do problema.
     */
    linha = (char*) le_linha(arquivo_entrada);    
    if((sscanf(linha,"%d",&numero_instancias))!= 1){
        printf("Erro ao definir o numero de instancias da aplicacao\n");
        exit(-2);
    }
    
    
    while(instancias_executadas < numero_instancias){
        
        /*Definido o numero de instâncias, recuperamos o número
         * de vertices que o poligono é constituido.
         */
        linha = (char*) le_linha(arquivo_entrada);       
        if((sscanf(linha,"%d",&num_vertices))!= 1){
        printf("Erro em definir numero de vertices\n");
        exit(-2);
        }
          
        /*Populando a lista de vertices*/
        for(i=0;i<num_vertices;i++){
            linha = (char*) le_linha(arquivo_entrada);
            if((sscanf(linha,"%d/%d %d/%d",&divid_x, &div_x,
                                           &divid_y, &div_y))!= 4){
            printf("Erro em definir as abcissas e ordenadas\n");
            exit(-2);
            }
            
            define_ponto(p, (divid_x/div_x), divid_y/div_y);
            define_vertice(v,i+1,p);
            insere_item(&poligono,v);
                        
        }
        
        imprime_lista(poligono);
        
        instancias_executadas++;     
    }
    /*Desalocando a memória utilizada.*/
    remove_todos(&poligono);    
    apaga_vertice(v);
    fecha_arquivo(arquivo_entrada);
    fecha_arquivo(arquivo_saida);
    printf("Criado arquivo %s com a saída do programa.\n", nome_saida);
    return (EXIT_SUCCESS);
}

